/*
 Copyright (c) 2024 Broin All rights reserved.
 Use of this source code is governed by a BSD-style
 license that can be found in the LICENSE file.
 */

#ifndef MAP_DEFS__H
#define MAP_DEFS__H

#include "vmlinux.h"
#include "maps.h"
#include "../../include/struct.h"

/* 访控相关 */

// 主体-角色列表
BPF_HASH(sub_to_role, subject_t, role_t, 32, 0, 0);

/* 文件系统访问控制策略 */
// 全局文件系统访问控制策略(无角色信息，即全角色均遵循的访问控制策略)
BPF_HASH(whole_fs_policy, u32, file_policy_val_t, 32, 0, 0); // 键为文件s_dev
// 引入主体角色的访问控制策略
BPF_HASH(fs_policy, fs_policy_key_t, file_policy_val_t, 32, 0, 0);

/* 文件访问控制策略 */
// 全局文件访问控制策略(无角信息，即全角色均遵循的访问控制)
BPF_HASH(whole_file_policy, u64, file_policy_val_t, 32, 0, 0); // 键为文件ino
// 引入主体角色的访问控制策略
BPF_HASH(file_policy, file_policy_key_t, file_policy_val_t, 32, 0, 0);

/* 网络访问控制策略*/
// 全局网络访问控制,即没有角色
BPF_HASH(whole_net_policy, u32, net_policy_val_t, 32, 0, 0);
// 引入主体角色的访问控制策略
BPF_HASH(net_policy, net_policy_key_t, net_policy_val_t, 32, 0, 0);

/* 容器的mntns以及阶段相关 */
BPF_HASH(container_policy, char[256], policy_container_val_t, 32, 0, 0); // 键为容器名字
BPF_HASH(containers_mntns, u64, u64, 32, 0, 0);
BPF_HASH(containers_host, u64, u64, 32, 0, 0);
BPF_HASH(containers_abs_path, char[256], char[256], 32, 0, 0);

/* 审计相关 */
BPF_RINGBUF(event_audit, 16, 0);

/* 复制和移动更改inode相关 */
BPF_RINGBUF(old_pid_inode, 16, 0);
BPF_RINGBUF(container_path, 16, 0);
#endif // !MAP_DEFS__H